module BoothMul(
  input         clock,
  input         reset,
  input         in_load,
  input  [7:0]  in_A,
  input  [7:0]  in_B,
  output [15:0] out_P,
  output        out_Q,
  output [7:0]  out_c,
  output [7:0]  out_comp,
  output        out_shift
);
  reg  prod_0; // @[BoothMul.scala 29:21]
  reg  prod_1; // @[BoothMul.scala 29:21]
  reg  prod_2; // @[BoothMul.scala 29:21]
  reg  prod_3; // @[BoothMul.scala 29:21]
  reg  prod_4; // @[BoothMul.scala 29:21]
  reg  prod_5; // @[BoothMul.scala 29:21]
  reg  prod_6; // @[BoothMul.scala 29:21]
  reg  prod_7; // @[BoothMul.scala 29:21]
  reg  prod_8; // @[BoothMul.scala 29:21]
  reg  prod_9; // @[BoothMul.scala 29:21]
  reg  prod_10; // @[BoothMul.scala 29:21]
  reg  prod_11; // @[BoothMul.scala 29:21]
  reg  prod_12; // @[BoothMul.scala 29:21]
  reg  prod_13; // @[BoothMul.scala 29:21]
  reg  prod_14; // @[BoothMul.scala 29:21]
  reg  prod_15; // @[BoothMul.scala 29:21]
  reg  Q; // @[BoothMul.scala 31:21]
  reg  shift; // @[BoothMul.scala 33:22]
  reg [7:0] count; // @[BoothMul.scala 34:22]
  wire [8:0] _GEN_133 = {{1'd0}, in_A}; // @[BoothMul.scala 37:26]
  wire [8:0] _Acomp_T_1 = 9'h100 - _GEN_133; // @[BoothMul.scala 37:26]
  wire [7:0] _count_T_1 = count + 8'h1; // @[BoothMul.scala 58:22]
  wire [7:0] Acomp = _Acomp_T_1[7:0]; // @[BoothMul.scala 27:19 37:9]
  wire  m = Acomp[0]; // @[BoothMul.scala 65:22]
  wire  m_1 = Acomp[1]; // @[BoothMul.scala 65:22]
  wire  m_8 = in_A[0]; // @[BoothMul.scala 80:21]
  wire  _GEN_1 = Q & ~prod_0 & (prod_8 & m_8); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_27 = ~Q & prod_0 ? prod_8 & m : _GEN_1; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_71 = shift ? 1'h0 : _GEN_27; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_98 = count < 8'h8 & _GEN_71; // @[BoothMul.scala 39:14 49:29]
  wire  carry_1 = in_load ? 1'h0 : _GEN_98; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_2_T_3 = carry_1 & prod_9; // @[BoothMul.scala 69:38]
  wire  m_2 = Acomp[2]; // @[BoothMul.scala 65:22]
  wire  m_9 = in_A[1]; // @[BoothMul.scala 80:21]
  wire  _GEN_3 = Q & ~prod_0 & (prod_9 & m_9 | m_9 & carry_1 | _carry_2_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_29 = ~Q & prod_0 ? prod_9 & m_1 | m_1 & carry_1 | carry_1 & prod_9 : _GEN_3; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_72 = shift ? 1'h0 : _GEN_29; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_99 = count < 8'h8 & _GEN_72; // @[BoothMul.scala 39:14 49:29]
  wire  carry_2 = in_load ? 1'h0 : _GEN_99; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_3_T_3 = carry_2 & prod_10; // @[BoothMul.scala 69:38]
  wire  m_3 = Acomp[3]; // @[BoothMul.scala 65:22]
  wire  m_10 = in_A[2]; // @[BoothMul.scala 80:21]
  wire  _GEN_5 = Q & ~prod_0 & (prod_10 & m_10 | m_10 & carry_2 | _carry_3_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_31 = ~Q & prod_0 ? prod_10 & m_2 | m_2 & carry_2 | carry_2 & prod_10 : _GEN_5; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_73 = shift ? 1'h0 : _GEN_31; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_100 = count < 8'h8 & _GEN_73; // @[BoothMul.scala 39:14 49:29]
  wire  carry_3 = in_load ? 1'h0 : _GEN_100; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_4_T_3 = carry_3 & prod_11; // @[BoothMul.scala 69:38]
  wire  m_4 = Acomp[4]; // @[BoothMul.scala 65:22]
  wire  m_11 = in_A[3]; // @[BoothMul.scala 80:21]
  wire  _GEN_7 = Q & ~prod_0 & (prod_11 & m_11 | m_11 & carry_3 | _carry_4_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_33 = ~Q & prod_0 ? prod_11 & m_3 | m_3 & carry_3 | carry_3 & prod_11 : _GEN_7; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_74 = shift ? 1'h0 : _GEN_33; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_101 = count < 8'h8 & _GEN_74; // @[BoothMul.scala 39:14 49:29]
  wire  carry_4 = in_load ? 1'h0 : _GEN_101; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_5_T_3 = carry_4 & prod_12; // @[BoothMul.scala 69:38]
  wire  m_5 = Acomp[5]; // @[BoothMul.scala 65:22]
  wire  m_12 = in_A[4]; // @[BoothMul.scala 80:21]
  wire  _GEN_9 = Q & ~prod_0 & (prod_12 & m_12 | m_12 & carry_4 | _carry_5_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_35 = ~Q & prod_0 ? prod_12 & m_4 | m_4 & carry_4 | carry_4 & prod_12 : _GEN_9; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_75 = shift ? 1'h0 : _GEN_35; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_102 = count < 8'h8 & _GEN_75; // @[BoothMul.scala 39:14 49:29]
  wire  carry_5 = in_load ? 1'h0 : _GEN_102; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_6_T_3 = carry_5 & prod_13; // @[BoothMul.scala 69:38]
  wire  m_6 = Acomp[6]; // @[BoothMul.scala 65:22]
  wire  m_13 = in_A[5]; // @[BoothMul.scala 80:21]
  wire  _GEN_11 = Q & ~prod_0 & (prod_13 & m_13 | m_13 & carry_5 | _carry_6_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_37 = ~Q & prod_0 ? prod_13 & m_5 | m_5 & carry_5 | carry_5 & prod_13 : _GEN_11; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_76 = shift ? 1'h0 : _GEN_37; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_103 = count < 8'h8 & _GEN_76; // @[BoothMul.scala 39:14 49:29]
  wire  carry_6 = in_load ? 1'h0 : _GEN_103; // @[BoothMul.scala 39:14 42:17]
  wire  _carry_7_T_3 = carry_6 & prod_14; // @[BoothMul.scala 69:38]
  wire  m_7 = Acomp[7]; // @[BoothMul.scala 65:22]
  wire  m_14 = in_A[6]; // @[BoothMul.scala 80:21]
  wire  _GEN_13 = Q & ~prod_0 & (prod_14 & m_14 | m_14 & carry_6 | _carry_7_T_3); // @[BoothMul.scala 76:40 84:12 39:14]
  wire  _GEN_39 = ~Q & prod_0 ? prod_14 & m_6 | m_6 & carry_6 | carry_6 & prod_14 : _GEN_13; // @[BoothMul.scala 61:40 69:12]
  wire  _GEN_77 = shift ? 1'h0 : _GEN_39; // @[BoothMul.scala 39:14 51:17]
  wire  _GEN_104 = count < 8'h8 & _GEN_77; // @[BoothMul.scala 39:14 49:29]
  wire  carry_7 = in_load ? 1'h0 : _GEN_104; // @[BoothMul.scala 39:14 42:17]
  wire  m_15 = in_A[7]; // @[BoothMul.scala 80:21]
  wire  _GEN_0 = Q & ~prod_0 ? prod_8 ^ m_8 : prod_8; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_2 = Q & ~prod_0 ? prod_9 ^ m_9 ^ carry_1 : prod_9; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_4 = Q & ~prod_0 ? prod_10 ^ m_10 ^ carry_2 : prod_10; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_6 = Q & ~prod_0 ? prod_11 ^ m_11 ^ carry_3 : prod_11; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_8 = Q & ~prod_0 ? prod_12 ^ m_12 ^ carry_4 : prod_12; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_10 = Q & ~prod_0 ? prod_13 ^ m_13 ^ carry_5 : prod_13; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_12 = Q & ~prod_0 ? prod_14 ^ m_14 ^ carry_6 : prod_14; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_14 = Q & ~prod_0 ? prod_15 ^ m_15 ^ carry_7 : prod_15; // @[BoothMul.scala 76:40 83:11 93:12]
  wire  _GEN_25 = Q & ~prod_0 ? 1'h0 : Q; // @[BoothMul.scala 31:21 76:40 94:9]
  wire  _GEN_26 = ~Q & prod_0 ? prod_8 ^ m : _GEN_0; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_28 = ~Q & prod_0 ? prod_9 ^ m_1 ^ carry_1 : _GEN_2; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_30 = ~Q & prod_0 ? prod_10 ^ m_2 ^ carry_2 : _GEN_4; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_32 = ~Q & prod_0 ? prod_11 ^ m_3 ^ carry_3 : _GEN_6; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_34 = ~Q & prod_0 ? prod_12 ^ m_4 ^ carry_4 : _GEN_8; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_36 = ~Q & prod_0 ? prod_13 ^ m_5 ^ carry_5 : _GEN_10; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_38 = ~Q & prod_0 ? prod_14 ^ m_6 ^ carry_6 : _GEN_12; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_40 = ~Q & prod_0 ? prod_15 ^ m_7 ^ carry_7 : _GEN_14; // @[BoothMul.scala 61:40 68:11]
  wire  _GEN_51 = ~Q & prod_0 ? 1'h0 : _GEN_25; // @[BoothMul.scala 31:21 61:40]
  wire  _GEN_52 = shift ? prod_0 : _GEN_51; // @[BoothMul.scala 51:17 53:9]
  wire  _GEN_53 = shift ? prod_1 : prod_0; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_54 = shift ? prod_2 : prod_1; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_55 = shift ? prod_3 : prod_2; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_56 = shift ? prod_4 : prod_3; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_57 = shift ? prod_5 : prod_4; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_58 = shift ? prod_6 : prod_5; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_59 = shift ? prod_7 : prod_6; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_60 = shift ? prod_8 : prod_7; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_61 = shift ? prod_9 : _GEN_26; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_62 = shift ? prod_10 : _GEN_28; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_63 = shift ? prod_11 : _GEN_30; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_64 = shift ? prod_12 : _GEN_32; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_65 = shift ? prod_13 : _GEN_34; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_66 = shift ? prod_14 : _GEN_36; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_67 = shift ? prod_15 : _GEN_38; // @[BoothMul.scala 51:17 55:17]
  wire  _GEN_68 = shift ? prod_15 : _GEN_40; // @[BoothMul.scala 51:17 57:22]
  wire  _GEN_70 = shift ? 1'h0 : 1'h1; // @[BoothMul.scala 51:17 59:13]
  wire  _GEN_79 = count < 8'h8 & _GEN_52; // @[BoothMul.scala 31:21 49:29]
  wire  _GEN_80 = count < 8'h8 & _GEN_53; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_81 = count < 8'h8 & _GEN_54; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_82 = count < 8'h8 & _GEN_55; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_83 = count < 8'h8 & _GEN_56; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_84 = count < 8'h8 & _GEN_57; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_85 = count < 8'h8 & _GEN_58; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_86 = count < 8'h8 & _GEN_59; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_87 = count < 8'h8 & _GEN_60; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_88 = count < 8'h8 & _GEN_61; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_89 = count < 8'h8 & _GEN_62; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_90 = count < 8'h8 & _GEN_63; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_91 = count < 8'h8 & _GEN_64; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_92 = count < 8'h8 & _GEN_65; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_93 = count < 8'h8 & _GEN_66; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_94 = count < 8'h8 & _GEN_67; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_95 = count < 8'h8 & _GEN_68; // @[BoothMul.scala 29:21 49:29]
  wire  _GEN_97 = count < 8'h8 & _GEN_70; // @[BoothMul.scala 33:22 49:29]
  wire [7:0] out_P_lo = {prod_7,prod_6,prod_5,prod_4,prod_3,prod_2,prod_1,prod_0}; // @[BoothMul.scala 101:17]
  wire [7:0] out_P_hi = {prod_15,prod_14,prod_13,prod_12,prod_11,prod_10,prod_9,prod_8}; // @[BoothMul.scala 101:17]
  assign out_P = {out_P_hi,out_P_lo}; // @[BoothMul.scala 101:17]
  assign out_Q = Q; // @[BoothMul.scala 102:9]
  assign out_c = count; // @[BoothMul.scala 103:9]
  assign out_comp = _Acomp_T_1[7:0]; // @[BoothMul.scala 27:19 37:9]
  assign out_shift = shift; // @[BoothMul.scala 105:13]
  always @(posedge clock) begin
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_0 <= in_B[0]; // @[BoothMul.scala 46:15]
    end else begin
      prod_0 <= _GEN_80;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_1 <= in_B[1]; // @[BoothMul.scala 46:15]
    end else begin
      prod_1 <= _GEN_81;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_2 <= in_B[2]; // @[BoothMul.scala 46:15]
    end else begin
      prod_2 <= _GEN_82;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_3 <= in_B[3]; // @[BoothMul.scala 46:15]
    end else begin
      prod_3 <= _GEN_83;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_4 <= in_B[4]; // @[BoothMul.scala 46:15]
    end else begin
      prod_4 <= _GEN_84;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_5 <= in_B[5]; // @[BoothMul.scala 46:15]
    end else begin
      prod_5 <= _GEN_85;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_6 <= in_B[6]; // @[BoothMul.scala 46:15]
    end else begin
      prod_6 <= _GEN_86;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_7 <= in_B[7]; // @[BoothMul.scala 46:15]
    end else begin
      prod_7 <= _GEN_87;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_8 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_8 <= _GEN_88;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_9 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_9 <= _GEN_89;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_10 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_10 <= _GEN_90;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_11 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_11 <= _GEN_91;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_12 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_12 <= _GEN_92;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_13 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_13 <= _GEN_93;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_14 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_14 <= _GEN_94;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      prod_15 <= 1'h0; // @[BoothMul.scala 47:22]
    end else begin
      prod_15 <= _GEN_95;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      Q <= 1'h0; // @[BoothMul.scala 44:7]
    end else begin
      Q <= _GEN_79;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      shift <= 1'h0; // @[BoothMul.scala 33:22]
    end else begin
      shift <= _GEN_97;
    end
    if (in_load) begin // @[BoothMul.scala 42:17]
      count <= 8'h0; // @[BoothMul.scala 34:22]
    end else if (count < 8'h8) begin // @[BoothMul.scala 49:29]
      if (shift) begin // @[BoothMul.scala 51:17]
        count <= _count_T_1; // @[BoothMul.scala 58:13]
      end else begin
        count <= 8'h0; // @[BoothMul.scala 34:22]
      end
    end else begin
      count <= 8'h0; // @[BoothMul.scala 34:22]
    end
  end
endmodule
